#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@File    :   __init__.py
@Time    :   2024-07-09 13:00:18
@Author  :   chakcy 
@Email   :   947105045@qq.com
@description   :   jwt 依赖
'''

from datetime import datetime, timedelta
from typing import Dict, Any, Union

import jwt

from app.config import config
from .api_key import Authorization

jwt_config = config.jwt

def create_access_token(data: Dict[str, Any]):
    """"
    创建 access token
    
    参数：
    - data: 字典类型，包含用户信息，如：{'id': 1, 'username': 'admin'}
    
    返回：
    - access_token: 字符串类型，包含 access token
    """
    to_encode = data.copy()

    expire = datetime.utcnow() + timedelta(minutes=jwt_config.access_token_expire_minutes) # type: ignore
    to_encode.update({'exp': expire})
    encoded_jwt = jwt.encode( 
        to_encode, 
        jwt_config.secret_key, 
        algorithm=jwt_config.algorithm
    )
    return "Bearer " + encoded_jwt

def decode_token(token: str) -> Union[Dict[str, Any], None]:
    """"
    解码 token

    参数：
    - token: 字符串类型，包含 access token
    
    返回：
    - data: 字典类型，包含用户信息，如：{'id': 1, 'username': 'admin'}
    """
    try:
        data = jwt.decode(
            token.split(" ")[1], 
            jwt_config.secret_key, 
            algorithms=[jwt_config.algorithm]
        ) 
        return data
    except Exception as e:
        return None